; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc  -O0 -mtriple=mipsel-linux-gnu -global-isel  -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32

define i1 @eq_i32(i32 %a, i32 %b){
; MIPS32-LABEL: eq_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    xor $1, $4, $5
; MIPS32-NEXT:    sltiu $2, $1, 1
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp eq i32 %a, %b
  ret i1 %cmp
}

define i1 @ne_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: ne_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    xor $1, $4, $5
; MIPS32-NEXT:    sltu $2, $zero, $1
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp ne i32 %a, %b
  ret i1 %cmp
}

define i1 @sgt_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: sgt_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    slt $2, $5, $4
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp sgt i32 %a, %b
  ret i1 %cmp
}

define i1 @sge_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: sge_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    slt $1, $4, $5
; MIPS32-NEXT:    xori $2, $1, 1
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp sge i32 %a, %b
  ret i1 %cmp
}

define i1 @slt_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: slt_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    slt $2, $4, $5
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp slt i32 %a, %b
  ret i1 %cmp
}

define i1 @sle_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: sle_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    slt $1, $5, $4
; MIPS32-NEXT:    xori $2, $1, 1
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp sle i32 %a, %b
  ret i1 %cmp
}

define i1 @ugt_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: ugt_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    sltu $2, $5, $4
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp ugt i32 %a, %b
  ret i1 %cmp
}

define i1 @uge_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: uge_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    sltu $1, $4, $5
; MIPS32-NEXT:    xori $2, $1, 1
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp uge i32 %a, %b
  ret i1 %cmp
}

define i1 @ult_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: ult_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    sltu $2, $4, $5
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp ult i32 %a, %b
  ret i1 %cmp
}

define i1 @ule_i32(i32 %a, i32 %b) {
; MIPS32-LABEL: ule_i32:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    sltu $1, $5, $4
; MIPS32-NEXT:    xori $2, $1, 1
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp ule i32 %a, %b
  ret i1 %cmp
}

define i1 @eq_ptr(ptr %a, ptr %b){
; MIPS32-LABEL: eq_ptr:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    xor $1, $4, $5
; MIPS32-NEXT:    sltiu $2, $1, 1
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp eq ptr %a, %b
  ret i1 %cmp
}

define i1 @ult_i8(i8 %a, i8 %b) {
; MIPS32-LABEL: ult_i8:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    andi $1, $4, 255
; MIPS32-NEXT:    andi $2, $5, 255
; MIPS32-NEXT:    sltu $2, $1, $2
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp ult i8 %a, %b
  ret i1 %cmp
}

define i1 @slt_i16(i16 %a, i16 %b) {
; MIPS32-LABEL: slt_i16:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    sll $1, $4, 16
; MIPS32-NEXT:    sra $1, $1, 16
; MIPS32-NEXT:    sll $2, $5, 16
; MIPS32-NEXT:    sra $2, $2, 16
; MIPS32-NEXT:    slt $2, $1, $2
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp slt i16 %a, %b
  ret i1 %cmp
}

define i1 @eq_i64(i64 %a, i64 %b){
; MIPS32-LABEL: eq_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    xor $1, $4, $6
; MIPS32-NEXT:    xor $2, $5, $7
; MIPS32-NEXT:    or $1, $1, $2
; MIPS32-NEXT:    sltiu $2, $1, 1
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp eq i64 %a, %b
  ret i1 %cmp
}

define i1 @ne_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: ne_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    xor $1, $4, $6
; MIPS32-NEXT:    xor $2, $5, $7
; MIPS32-NEXT:    or $1, $1, $2
; MIPS32-NEXT:    sltu $2, $zero, $1
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp ne i64 %a, %b
  ret i1 %cmp
}

define i1 @sgt_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: sgt_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    slt $2, $7, $5
; MIPS32-NEXT:    xor $1, $5, $7
; MIPS32-NEXT:    sltiu $3, $1, 1
; MIPS32-NEXT:    sltu $1, $6, $4
; MIPS32-NEXT:    andi $3, $3, 1
; MIPS32-NEXT:    movn $2, $1, $3
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp sgt i64 %a, %b
  ret i1 %cmp
}

define i1 @sge_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: sge_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    slt $1, $5, $7
; MIPS32-NEXT:    xori $2, $1, 1
; MIPS32-NEXT:    xor $1, $5, $7
; MIPS32-NEXT:    sltiu $3, $1, 1
; MIPS32-NEXT:    sltu $1, $4, $6
; MIPS32-NEXT:    xori $1, $1, 1
; MIPS32-NEXT:    andi $3, $3, 1
; MIPS32-NEXT:    movn $2, $1, $3
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp sge i64 %a, %b
  ret i1 %cmp
}

define i1 @slt_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: slt_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    slt $2, $5, $7
; MIPS32-NEXT:    xor $1, $5, $7
; MIPS32-NEXT:    sltiu $3, $1, 1
; MIPS32-NEXT:    sltu $1, $4, $6
; MIPS32-NEXT:    andi $3, $3, 1
; MIPS32-NEXT:    movn $2, $1, $3
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp slt i64 %a, %b
  ret i1 %cmp
}

define i1 @sle_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: sle_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    slt $1, $7, $5
; MIPS32-NEXT:    xori $2, $1, 1
; MIPS32-NEXT:    xor $1, $5, $7
; MIPS32-NEXT:    sltiu $3, $1, 1
; MIPS32-NEXT:    sltu $1, $6, $4
; MIPS32-NEXT:    xori $1, $1, 1
; MIPS32-NEXT:    andi $3, $3, 1
; MIPS32-NEXT:    movn $2, $1, $3
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp sle i64 %a, %b
  ret i1 %cmp
}

define i1 @ugt_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: ugt_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    sltu $2, $7, $5
; MIPS32-NEXT:    xor $1, $5, $7
; MIPS32-NEXT:    sltiu $3, $1, 1
; MIPS32-NEXT:    sltu $1, $6, $4
; MIPS32-NEXT:    andi $3, $3, 1
; MIPS32-NEXT:    movn $2, $1, $3
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp ugt i64 %a, %b
  ret i1 %cmp
}

define i1 @uge_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: uge_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    sltu $1, $5, $7
; MIPS32-NEXT:    xori $2, $1, 1
; MIPS32-NEXT:    xor $1, $5, $7
; MIPS32-NEXT:    sltiu $3, $1, 1
; MIPS32-NEXT:    sltu $1, $4, $6
; MIPS32-NEXT:    xori $1, $1, 1
; MIPS32-NEXT:    andi $3, $3, 1
; MIPS32-NEXT:    movn $2, $1, $3
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp uge i64 %a, %b
  ret i1 %cmp
}

define i1 @ult_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: ult_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    sltu $2, $5, $7
; MIPS32-NEXT:    xor $1, $5, $7
; MIPS32-NEXT:    sltiu $3, $1, 1
; MIPS32-NEXT:    sltu $1, $4, $6
; MIPS32-NEXT:    andi $3, $3, 1
; MIPS32-NEXT:    movn $2, $1, $3
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp ult i64 %a, %b
  ret i1 %cmp
}

define i1 @ule_i64(i64 %a, i64 %b) {
; MIPS32-LABEL: ule_i64:
; MIPS32:       # %bb.0: # %entry
; MIPS32-NEXT:    sltu $1, $7, $5
; MIPS32-NEXT:    xori $2, $1, 1
; MIPS32-NEXT:    xor $1, $5, $7
; MIPS32-NEXT:    sltiu $3, $1, 1
; MIPS32-NEXT:    sltu $1, $6, $4
; MIPS32-NEXT:    xori $1, $1, 1
; MIPS32-NEXT:    andi $3, $3, 1
; MIPS32-NEXT:    movn $2, $1, $3
; MIPS32-NEXT:    jr $ra
; MIPS32-NEXT:    nop
entry:
  %cmp = icmp ule i64 %a, %b
  ret i1 %cmp
}
